@Query অ্যানোটেশন ব্যবহার করে Custom Query লেখা

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Query Methods এবং Custom Queries
157

@Query অ্যানোটেশন কী?

Spring Data JPA-তে @Query অ্যানোটেশন ব্যবহার করে কাস্টম SQL বা JPQL (Java Persistence Query Language) কোয়েরি লেখা যায়। এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে ডিফল্ট মেথডের মাধ্যমে কাঙ্ক্ষিত ফলাফল পাওয়া সম্ভব নয়। @Query অ্যানোটেশনের মাধ্যমে ডেভেলপাররা সরাসরি জটিল এবং নির্দিষ্ট ডেটা অপারেশনের জন্য কোয়েরি কাস্টমাইজ করতে পারেন।


@Query এর বৈশিষ্ট্য

  • JPQL এবং Native Query: @Query অ্যানোটেশনে JPQL (Object-Oriented Query) এবং Native SQL (Raw Query) লেখা সম্ভব।
  • প্যারামিটারাইজড কুয়েরি: প্লেসহোল্ডার বা নামযুক্ত প্যারামিটারের মাধ্যমে কোয়েরি আরও নিরাপদ করা যায়।
  • কাস্টম ফলাফল: জটিল ডেটা অপারেশনের জন্য কাস্টম কুয়েরি লিখতে ব্যবহার করা হয়।

@Query ব্যবহার করে কাস্টম কুয়েরি লেখার ধাপ

১. সাধারণ কুয়েরি

একটি নির্দিষ্ট নামের প্রোডাক্ট খুঁজে বের করতে @Query ব্যবহার করা যায়:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    @Query("SELECT p FROM Product p WHERE p.name = :name")
    List<Product> findByName(@Param("name") String name);
}

ব্যবহার:

List<Product> products = productRepository.findByName("Laptop");
products.forEach(System.out::println);

২. Native Query

Native SQL কুয়েরি ব্যবহার করতে nativeQuery প্যারামিটার true করতে হবে:

@Query(value = "SELECT * FROM products WHERE price > :price", nativeQuery = true)
List<Product> findProductsAbovePrice(@Param("price") Double price);

ব্যবহার:

List<Product> products = productRepository.findProductsAbovePrice(50000.0);
products.forEach(System.out::println);

@Query এর মাধ্যমে জটিল কুয়েরি

১. প্রাইসের সীমার মধ্যে প্রোডাক্ট খুঁজে আনা

@Query("SELECT p FROM Product p WHERE p.price BETWEEN :minPrice AND :maxPrice")
List<Product> findProductsInPriceRange(@Param("minPrice") Double minPrice, @Param("maxPrice") Double maxPrice);

ব্যবহার:

List<Product> products = productRepository.findProductsInPriceRange(30000.0, 70000.0);
products.forEach(System.out::println);

২. নাম ও প্রাইসের ভিত্তিতে ফিল্টার

@Query("SELECT p FROM Product p WHERE p.name LIKE %:name% AND p.price < :price")
List<Product> findByNameAndPriceLessThan(@Param("name") String name, @Param("price") Double price);

ব্যবহার:

List<Product> products = productRepository.findByNameAndPriceLessThan("Lap", 80000.0);
products.forEach(System.out::println);

Pagination এবং Sorting সহ @Query

Spring Data JPA-এর পেজিনেশন ও সোর্টিং ফিচার @Query এর সাথে ব্যবহার করা যায়:

@Query("SELECT p FROM Product p WHERE p.price > :price")
Page<Product> findProductsWithPagination(@Param("price") Double price, Pageable pageable);

ব্যবহার:

Pageable pageable = PageRequest.of(0, 5, Sort.by("price").ascending());
Page<Product> productPage = productRepository.findProductsWithPagination(40000.0, pageable);

productPage.getContent().forEach(System.out::println);

@Query এর সুবিধা

  • জটিল কুয়েরি সহজে লেখা যায়।
  • কোড আরও কাস্টমাইজড এবং অ্যাপ্লিকেশন লজিক অনুযায়ী ফ্লেক্সিবল হয়।
  • Native SQL এবং JPQL উভয়কেই সাপোর্ট করে।

@Query এর সীমাবদ্ধতা

  • বড় এবং জটিল কুয়েরির ক্ষেত্রে মেইনটেনেন্স কঠিন হতে পারে।
  • ডাইনামিক কুয়েরির জন্য Criteria API বা Specification ব্যবহার করতে হতে পারে।
  • Native Query এর ক্ষেত্রে ডাটাবেসের উপর নির্ভরশীলতা বৃদ্ধি পায়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...